package com.xbongbong.paas.pojo.dto;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.xbongbong.paas.domain.entity.PaasFormDataEntity;
import com.xbongbong.paas.enums.TaskTypeEnum;
import com.xbongbong.paas.field.FieldAttrEntity;
import com.xbongbong.paas.toolbox.wrap.BaseDTO;
import com.xbongbong.pro.formdata.pojo.SaasNeedRedundantAttrPojo;
import com.xbongbong.pro.team.TeamAfterVerifyDTO;
import com.xbongbong.pro.user.pojo.ReturnUserAndDepartmentPojo;
import com.xbongbong.saas.domain.entity.OnlinePaymentFlowEntity;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 校验数据格式
 *
 * @author wufeng
 * @date 2018/12/21 16:05
 *
 */
@Getter
@Setter
@ToString
public class ValidateDataDTO extends BaseDTO {
    private static final long serialVersionUID = 2188942970358628348L;

    /**
     * 应用ID
     */
    @NotNull(message = "{dto.msg.validateData.appId.NotNull}")
    private Long appId;
    /**
     * 表单id
     */
    @NotNull(message = "{dto.msg.validateData.formId.NotNull}")
    private Long formId;
    /**
     * 菜单id
     */
    @NotNull(message = "{dto.msg.validateData.menuId.NotNull}")
    private Long menuId;

    private Long dataId;
    /**
     * 数据
     */
    private JSONObject data;
    /**
     * 字段容器
     */
    private Map<String, FieldAttrEntity> explainMap;

    /**
     * saas标记
     */
    private Integer saasMark;

    /**
     * saas业务类型
     */
    private Integer businessType;
    /**
     * 子业务类型
     */
    private Integer subBusinessType;

    /**
     * 流水号
     */
    private String serialNo;
    /**
     * 组号(报价单)
     */
    private String groupNumber;

    /**
     * 负责人id
     */
    private String ownerId;

    /**
     * 所属部门id
     */
    private Long departmentId;

    /**
     * saas所需的特殊传参pojo
     */
    private SaasNeedRedundantAttrPojo saasNeedRedundantAttrPoJo;
    /**
     * 工单模板id，工单专用
     */
    private Long templateId;

    /**
     * 是否是导入
     */
    private Integer isImport;

    /**
     * 是否无签订人导入
     */
    private Integer noSignImport;
    /**
     * 流程的关联新建用
     */
    private String processCreatorId;

    private String creatorId;

    /**
     * 多负责人的时候存入该ownerIds;
     */
    private List<ReturnUserAndDepartmentPojo> ownerIds;

    /**
     * 协同人集合
     */
    private List<ReturnUserAndDepartmentPojo> coUserId;
    /**
     * 可见部门集合
     */
    private List<Object> visbleDept;
    /**
     * 可见人集合
     */
    private List<Object> visbleUser;
    /**
     * 是否是导入删除联系人又加的联系人
     */
    private Integer importDelContact;
    /**
     * 是否是新版本
     */
    private Integer newVersion;
    /**
     * 旧单据
     */
    private PaasFormDataEntity paasFormDataEntity;
    /**
     * 金额明细
     */
    private JSONArray amountDetail;
    /**
     * true不检查金额为0（明细内金额为0不用检查）
     */
    private Boolean nonCheckAmount;

    /**
     * 是否覆盖导入
     */
    private Integer isCover;

    private Integer isOldProgressData;
    /**
     * 编辑时原先的负责人
     */
    private String oldOwnerId;

    /**
     * 审批流程状态
     */
    private TaskTypeEnum taskTypeEnum;
    /**
     * 表单数据id，新建表单审批通过使用
     */
    private Long formDataId;
    /**
     * 是否新建数据
     */
    private Boolean isNew;
    /**
     * 审批时需跳过自己的校验
     */
    private Long taskId;
    // 线索转换新建客户时，会传这个线索的id过来
    private Long clueId;

    /**
     * 是否外链新建
     */
    private Integer fromOuterLink;
    /**
     * 联系人数据id，联系人电话判重用
     */
    private Set<Long> contactDataIdSet;

    /**
     * 支付流水实体
     */
    private OnlinePaymentFlowEntity onlinePaymentFlowEntity;

    /**
     * 团队校验之后的实体
     */
    private TeamAfterVerifyDTO teamAfterVerifyDTO;

    /**
     * 是否来自审批
     */
    private Boolean fromApproval;
}
